home *** CD-ROM | disk | FTP | other *** search
/ Your Choice 3 / Your Choice Software Collection 3.iso / prgmming / fsprite3 / realbomb.pas < prev    next >
Pascal/Delphi Source File  |  1994-04-27  |  4KB  |  157 lines

  1. UNIT REALBOMB;
  2. {Unit Realbomb}
  3. {by Warren Steven Riley}
  4. {Copyright 1992,1994}
  5. {All Rights Reserved}
  6. INTERFACE
  7. USES CRT,FSPRITE3,REALVARS,REALEVIL;
  8. PROCEDURE LASER_BEAMS;
  9. PROCEDURE Bomberstuff;
  10.  
  11. IMPLEMENTATION
  12.  
  13. PROCEDURE LASER_BEAMS;
  14. BEGIN
  15. WITH ONSCREEN[BOMBER_OS] DO
  16.   BEGIN
  17.       FOR i:=Y TO 190 DO Mid^[i+6,X+2]:=red+64;
  18.       FOR i:=Y TO 190 DO Mid^[i+6,X+17]:=red+64;
  19.       FOR i:=Y TO 190 DO ACT[i+6,X+2]:=red+64;
  20.       FOR i:=Y TO 190 DO ACT[i+6,X+17]:=red+64;
  21.   END;
  22. END;
  23.  
  24. {  }Procedure bomber_hover;
  25. BEGIN                    {Bomber hover}
  26.  WITH ONSCREEN[BOMBER_OS] DO
  27.   BEGIN
  28.    bomber_act := TRUE;
  29.    DEC(  Y);
  30.    NUM := bomber1;
  31.    IF (RANDOM (20) = 15) OR (  Y < 10) THEN
  32.        BEGIN
  33.          bomber_act := FALSE;
  34.          NUM := bomber2;
  35.        END;
  36.    END;
  37. END;
  38.  
  39. {  }PROCEDURE BOMBER_GO_DOWN;
  40. BEGIN                    {Bomber Go Down}
  41.   WITH ONSCREEN[BOMBER_OS] DO
  42.   BEGIN
  43.     bomber_act := TRUE;
  44.     INC(  Y);
  45.     NUM := bomber3;
  46.     IF (RANDOM (20) = 15) OR (  Y > 160) THEN
  47.        BEGIN
  48.          bomber_act := FALSE;
  49.          NUM := bomber2;
  50.        END;
  51.   END;
  52. END;
  53.  
  54. {  }PROCEDURE BOMBER_GO_LEFT;
  55. BEGIN                    {Bomber go left}
  56.   WITH ONSCREEN[BOMBER_OS] DO
  57.   BEGIN
  58.    bomber_act := TRUE;
  59.    DEC(X);
  60.    IF (RANDOM (20) = 15) OR (X < 10) THEN
  61.       bomber_act := FALSE;
  62.   END;
  63. END;
  64.  
  65. {  }PROCEDURE BOMBER_GO_RIGHT;
  66. BEGIN             {Bomber go right}
  67.   WITH ONSCREEN[BOMBER_OS] DO
  68.   BEGIN
  69.     bomber_act := TRUE;
  70.     INC(X);
  71.     IF (RANDOM (20) = 15) OR (  X > 290) THEN
  72.         bomber_act := FALSE;
  73.   END;
  74. END;
  75.  
  76. {  }PROCEDURE ACTIVATE_BOMBER_LASER;
  77. BEGIN                    {Activate Bomber laser}
  78.   WITH ONSCREEN[BOMBER_OS] DO
  79.   BEGIN
  80.       IF X+2>ManX+2 THEN IF X+2<ManX+17 THEN deathme;
  81.       IF X+17>ManX+2 THEN IF X+17<ManX+17 THEN deathme;
  82.       bomber_act := TRUE;
  83.       LASER_BEAMS;
  84.       INC(bin);
  85.       sounder(bin*4+bjn*6+300);
  86.       bomber_noise:=TRUE;
  87.       IF bin=10 THEN
  88.          BEGIN
  89.            INC (bjn);
  90.            bin:=0;
  91.          END;
  92.       IF bjn>25 THEN bjn:=0;
  93.       IF bjn>2 THEN
  94.          IF (RANDOM(3)=1) THEN
  95.             BEGIN
  96.               FOR i:=Y TO 190 DO Mid^[i+6,X+2]:=back^[I+6,X+2];
  97.               FOR i :=Y TO 190 DO Mid^ [i + 6,X+17]:=back^[i+6,X+16];
  98.               FOR i:=Y TO 190 DO ACT[i+6,X+2]:=back^[I+6,X+2];
  99.               FOR i :=Y TO 190 DO ACT[i + 6,X+17]:=back^[i+6,X+16];
  100.               NOSOUND;
  101.               bomber_noise := FALSE;
  102.               BOMBER_MODE := 20;
  103.               BOMBER_CHANGE := 0;
  104.             END ELSE
  105.                  BEGIN
  106.                    bjn := 0;
  107.                    bin := 0;
  108.                  END;
  109.   END;
  110. END;
  111.  
  112. PROCEDURE Bomberstuff;
  113. VAR T : WORD;
  114. BEGIN
  115.   WITH ONSCREEN[BOMBER_OS] DO
  116.   BEGIN
  117.     IF NOT (bomber_act) THEN BOMBER_MODE := RANDOM (20);
  118.     IF NOT(bomber_act) THEN
  119.        IF BOMBER_MODE=19 THEN IF RANDOM(3)<>1 THEN BOMBER_MODE:=RANDOM(20);
  120.     IF BOMBER_HITS = 5 THEN   {Bomber gets hit 5 times and its destroyed}
  121.        BEGIN
  122.             BOMBER_HITS := 0;
  123.             BOMBER_MODE := 21;
  124.             bomber_act := TRUE;
  125.             NUM := Dbomber;
  126.        END;
  127.     IF BOMBER_MODE > 15 THEN
  128.        IF BOMBER_MODE < 21 THEN
  129.           IF RANDOM (2) = 1 THEN
  130.              IF NUM = bomber2 THEN NUM := bomber4 ELSE NUM := bomber2;
  131.     CASE BOMBER_MODE OF
  132.      11:BOMBER_HOVER;
  133.      12:BOMBER_GO_DOWN;
  134.      17:BOMBER_GO_LEFT;
  135.      18:BOMBER_GO_RIGHT;
  136.      19:ACTIVATE_BOMBER_LASER;
  137.      20:BEGIN    {Wait 80 iterartions after laser's fire(That's to be fair).}
  138.          INC (BOMBER_CHANGE);
  139.          IF BOMBER_CHANGE = 80 THEN bomber_act := FALSE;
  140.         END;
  141.      21:IF Y<205 THEN INC(Y); {Bomber destroyed, let it fall down}
  142.     end;
  143.     {Hit bomber with fire?}
  144.     FOR t := 2 TO 3 DO
  145.         IF ONSCREEN [LASTSHAPE_OS+t].ON THEN
  146.            IF X+20>ONSCREEN[LASTSHAPE_OS+t].X THEN
  147.               IF X+1<ONSCREEN[LASTSHAPE_OS+t].X THEN
  148.                  IF Y+10>ONSCREEN[LASTSHAPE_OS+t].Y THEN
  149.                     IF Y+3<ONSCREEN[LASTSHAPE_OS+T].Y THEN
  150.                        BEGIN
  151.                           ONSCREEN[LASTSHAPE_OS+t].ON:=FALSE;
  152.                           INC(BOMBER_HITS);
  153.                        END;
  154.    END;
  155. END;
  156. BEGIN
  157. END.